// // 抽象类
// abstract class Shape {
// 	// 子类必须实现
// 	abstract getArea(): number
// 	// 抽象类中可以有实现的方法  但是不能为抽象方法
// 	perimeter(r: number) {
// 		return 2 * 3.14 * r
// 	}
// }

// class Circle extends Shape {
// 	private r: number
// 	constructor(r: number) {
// 		super() //代表父类A的构造函数  但是返回的是子类B实例
// 		this.r = r
// 		// 注意这里的super指向的是Shape原型对象  但是this指向的是当前实例对象  
// 		super.perimeter(r)
// 	}
// 	// 继承方法 不能加private属性
// 	getArea() {
// 		return this.r * this.r * 3.14
// 	}
// }

// class Rectangle extends Shape {
// 	private width: number;
// 	private height: number;
// 	constructor(width: number, height: number) {
// 		super()
// 		this.width = width
// 		this.height = height
// 	}
// 	getArea() {
// 		return this.width * this.height
// 	}
// }

// const circle = new Circle(10)
// const rectangle = new Rectangle(20, 30)
// function calcArea(shape: Shape) {
// 	console.log(shape.getArea())
// }
// calcArea(circle)